﻿//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using System.IO;
//using Serialization;
//using UnityEngine;
//using UnityEditor;

//[InitializeOnLoad]
//public class EditorNotification : AssetPostprocessor
//{

//    private static bool isFocused;

//    static EditorNotification()
//    {
//        EditorApplication.update += Update;
//        UIFormHashKey = $"UIFormHashKey_{Application.dataPath.GetHashCode()}";
//    }

//    private static void Update()
//    {
//        if (isFocused != UnityEditorInternal.InternalEditorUtility.isApplicationActive)
//        {
//            isFocused = UnityEditorInternal.InternalEditorUtility.isApplicationActive;
//            OnEditorFocus(isFocused);
//        }
//    }

//    private static void OnEditorFocus(bool focus)
//    {
//        if (focus)
//        {
//            GenUIForm();
//        }
//    }

//    private static string UIFormHashKey;
//    private static byte[] EmptyData = new byte[0];

//    private static byte[] GetContentBytes(string content)
//    {
//        content = content.Replace("\n", "").Replace("\r", "").Replace("\t", "").Replace(" ", "");
//        return Encoding.UTF8.GetBytes(content);
//    }
//    private static byte[] GetFileBytes(string path)
//    {
//        if (File.Exists(path))
//        {
//            var txt = File.ReadAllText(path);
//            return GetContentBytes(txt);
//        }
//        return new byte[0];
//    }

//    private static int GetByteCrc(byte[] bytes, byte[] datas)
//    {
//        byte[] ret = new byte[bytes.Length + datas.Length];
//        Array.Copy(bytes, ret, bytes.Length);
//        Array.Copy(datas, 0, ret, bytes.Length, datas.Length);
//        return GetCrc(ret);
//    }

//    private static int GetCrc(byte[] bytes)
//    {
//        return GameFramework.Utility.Verifier.GetCrc32(bytes);
//    }

//    private static string GetUIFormJsonPath()
//    {
//        return $"ExtAssets/{UIFormMgr.AssetName}.json5";
//    }

//    private static List<UIFormData> list = new List<UIFormData>();

//    private static void LoadJsonData()
//    {
//        var path = GetUIFormJsonPath();
//        var lines = File.ReadAllLines(path);
//        lines = Array.FindAll(lines, (line) => !line.Trim('\t', '\r', ' ').StartsWith("//"));
//        list.Clear();
//        for (int i = 1; i < lines.Length - 1; i++)
//        {
//            var line = lines[i].Trim('\t', '\r', ' ').TrimEnd(',');
//            var json = LitJson.JsonMapper.ToObject(line);
//            var data = new UIFormData()
//            {
//                id = (int)json["Id"],
//                Asset = json["Asset"].ToString(),
//                Group = json["Group"].ToString(),
//                Pause = (int)json["Pause"] == 1,
//                Multi = (int)json["Multi"] == 1,
//            };
//            list.Add(data);
//        }
//    }

//    private static void GenUIForm()
//    {
//        var op = GetUIFormJsonPath();
//        var od = GetFileBytes(op);
//        var hash = EditorPrefs.GetString(UIFormHashKey, string.Empty);
//        var curHash = GameFramework.Utility.Verifier.GetCrc32(od).ToString();
//        // 检查源数据文件哈希值  json5 文件
//        if (curHash == hash)
//            return;
//        // Debug.Log($"[GenUIForm] Update Data Hash : {hash} -> {curHash}");
//        EditorPrefs.SetString(UIFormHashKey, curHash);

//        var pr = PackingRules.Reload();
//        var bytePath = $"{pr.ResDir}{pr.UIFormCfg}bytes";
//        var csPath = @"Dependenceies\Game\Scripts\Definition\Config\Generator\UIFormId.cs";
//        var originDataBytes = File.ReadAllBytes(bytePath);
//        var originCsBytes = GetFileBytes(csPath);
//        var originCrc = GetByteCrc(originDataBytes, originCsBytes);

//        LoadJsonData();
//        Writer writer = new Writer();
//        writer.Write(list.Count);
//        foreach (var data in list)
//            writer.Write(data);
//        byte[] targetBytes = writer.Finish();

//        var sb = new StringBuilder();
//        sb.AppendLine("//------------------------------------------------------------");
//        sb.AppendLine("// 此文件由工具自动生成，请勿直接修改。");
//        sb.AppendLine("//------------------------------------------------------------");
//        sb.AppendLine("\npublic class UIFormId");
//        sb.AppendLine("{");
//        foreach (var data in list)
//            sb.AppendLine($"\n\tpublic const int {data.Asset} = {data.id};");
//        sb.AppendLine("}");
//        var content = sb.ToString();
//        var targetCsBytes = GetContentBytes(content);

//        var targetCrc = GetByteCrc(targetBytes, targetCsBytes);
//        if (targetCrc == originCrc)
//            return;
//        // Debug.Log($"[GenUIForm] Update Files Hash : {originCrc} -> {targetCrc} ; {GetCrc(originCsBytes)} -> {GetCrc(targetCsBytes)} ; {GetCrc(originDataBytes)} -> {GetCrc(targetBytes)}");

//        File.WriteAllBytes(bytePath, targetBytes);
//        File.WriteAllText(csPath, content, Encoding.UTF8);
//    }
//}
